﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Generic;

namespace DECOR.WebApp
{
    public partial class DocCotizaImpr1 : System.Web.UI.Page
    {
        public List<DetalleBE> lstDetalle = new List<DetalleBE>();

        protected void Page_Init(object sender, EventArgs e)
        {
            //this.validaLogin();
        }

        private void validaLogin()
        {
            if (Session["UsuarioWeb"] == null || Session["UsuarioSAP"] == null)
            {
                Response.Redirect("Login.aspx");
                //en vez de redireccionar, debería cerrar la pantalla
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string numeroPedido = "";
                if (Request.QueryString["np"] != null)
                {
                    numeroPedido = Request.QueryString["np"].ToString();
                }

                if (!numeroPedido.Equals(""))
                {
                    PedidoBE objPedido;
                    if (Session["PedidoImpr"] == null)
                    {
                        objPedido = PedidoBC.Instance.leer(numeroPedido);
                    }
                    else
                    {
                        objPedido = (PedidoBE)Session["PedidoImpr"];
                    }

                    if (objPedido != null)
                    {
                        string pDireccion = "", pTelefono = "", pFax = "", pAtencion = "";
                        PedidoBC.Instance.buscaDatosImpresion(numeroPedido, out pDireccion, out pTelefono, out pFax, out pAtencion);
                        lblDireccionLogo.Text = pDireccion;

                        //sociedad Decor Center 
                        string[] words = pTelefono.Split('%');
                        pTelefono = words[0];
                        lblSociedad.Text = words[1]; 
                   
                        //------------------------------------------
                        
                        lblTelefonosLogo.Text = pTelefono + (pFax == "" ? "" : ", " + pFax);
                        lblRUC2.Text = ParametroBC.Instance.getParamValue("RUC");
                        try
                        {
                            lblNCliente.Text = objPedido.Interlocutores.Find(x =>  (x.Funcion.ToString().Equals("AG"))).Cliente.Descripcion;
                        }
                        catch { }
                        
                        //  lblAtt.Text = pAtencion;

                        InterlocutorBE objSolicitanteVende = objPedido.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor1")); });
                        GenericBE objCondPago = CondicionPagoBC.Instance.leer(objPedido.CondPago);
                        //if (objCondPago != null)
                        //{
                        //    lblCondpago.Text = objCondPago.Descripcion.Replace("::", "");
                        //}

                        if (objSolicitanteVende.Persona != null)
                        {
                            PersonaBE objVendedor = PersonaBC.Instance.leer(objSolicitanteVende.Persona.CodPersona);
                            if (objVendedor != null)
                            {
                                lblVendedor.Text = objVendedor.Descripcion;
                                lblTelef.Text = objVendedor.Telefono; //rgutierrez 03.02.2012
                            }
                        }
                        lblFecha.Text = objPedido.Fecha.ToShortDateString();


                        //-- validar si es un cliente eventual:
                        ClienteBE objCliente = ClienteBC.Instance.leer(objPedido.CodCliente);
                        if (objCliente.Eventual)//si es eventual
                        {
                            InterlocutorBE objSolicitante = objPedido.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocCliente")); });
                            if (objSolicitante != null && objSolicitante.Cliente != null)
                            {
                                //lblDatosDespacho.Text = objSolicitante.Cliente.DireccionCompleta.ToString();
                                lblRucCli.Text = objSolicitante.Cliente.Ruc.ToString();
                                //lblTelef.Text = objSolicitante.Cliente.Telefono.ToString(); //rgutierrez 03.02.2012
                                //try
                                //{
                                //    lblDistrito.Text = objSolicitante.Cliente.Distrito.ToString();
                                //}catch{
                                //    lblDistrito.Text = objSolicitante.Cliente.Ciudad.ToString();
                                //}
                            }
                        }
                        else
                        {
                            //lblDatosDespacho.Text = objCliente.DireccionCompleta;
                            lblRucCli.Text = objCliente.Ruc;
                            //lblTelef.Text = objCliente.Telefono; //rgutierrez 03.02.2012
                            ////try
                            ////{
                            ////    lblDistrito.Text = objCliente.Distrito.ToString();
                            ////}
                            ////catch
                            ////{
                            ////    lblDistrito.Text = objCliente.Ciudad.ToString();
                            ////}
                        }

                        if (ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                        {
                            lblCoti.Text = "COTIZACIÓN N° ";
                        }
                        else
                        {
                            lblCoti.Text = "N° PEDIDO VENTA ";
                        }

                        lblCotiza.Text = objPedido.NumPedido;

                        //lblValor.Text = ParametroBC.Instance.getParamValue(objPedido.Moneda) + " " + string.Format("{0:n2}", objPedido.SubTotal);
                        //lblIgv.Text = string.Format("{0:n2}", objPedido.Igv);
                        //lblTotal.Text = ParametroBC.Instance.getParamValue(objPedido.Moneda) + " " + string.Format("{0:n2}", objPedido.Total);
                        lblPerc.Text = string.Format("{0:n2}", objPedido.Percepcion);
                        lblTotal.Text = ParametroBC.Instance.getParamValue(objPedido.Moneda) + " " + string.Format("{0:n2}", objPedido.TotalImp + objPedido.Percepcion);
                        //lblFechaDD.Text = objPedido.FechaEntrega.ToShortDateString();
                        //--- quitar componentes de la oferta
                        objPedido.Detalle.RemoveAll(X => X.TipoPosicion == "Z017");
                        objPedido.Detalle.RemoveAll(X => X.TipoPosicion == "Z012");
                        List<string> lst = new List<string>();

                        if (ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                        {
                            string strAux;
                            foreach (DetalleBE objItem in objPedido.Detalle)
                            {
                                string mat = objItem.CodMaterialCorto;
                                lst.Add(mat);

                                if (!string.IsNullOrEmpty(objItem.CodLote))
                                {
                                    strAux = "";
                                    List<GenericBE> lstLotes = StockBC.Instance.listarLotes(objItem.CodMaterial, objItem.CodCentro, objItem.CodAlmacen, objItem.Cantidad, objPedido.NumPedido, out strAux);
                                    GenericBE itmLote = lstLotes.Find(X => X.Codigo == objItem.CodLote);

                                    if (itmLote != null && !string.IsNullOrEmpty(itmLote.Codigo))
                                    {
                                        strAux = itmLote.Descripcion;
                                        strAux = strAux.IndexOf('-') >= 0 ? strAux.Substring(strAux.IndexOf('-')) : "";
                                        objItem.DescMaterial += " " + strAux;                                        
                                    }
                                    
                                }
                                //objItem.DescMaterial = "" + objItem.CodMaterialCorto.Trim() + "" + Environment.NewLine + objItem.DescMaterial.Trim();
                            }
                        }

                        GdvLista.DataSource = objPedido.Detalle;
                        GdvLista.DataBind();

                        
                        //glosa

                        //rgutierrez 30.01.2012 Se quitaron las glosas en duro
                        ////Glosas por defecto:
                        //lblGlosa1.Text = ParametroBC.Instance.getParamValue("glosa1");
                       
                        //bool esCeramico = false;
                        //string strGlosa2 = ParametroBC.Instance.getParamValue("glosa2");

                        //foreach (DetalleBE det in objPedido.Detalle)
                        //{
                        //    if (det.Material.Jerarquia.Substring(0, 5).Equals("01001") || det.Material.Jerarquia.Substring(0, 5).Equals("01002"))
                        //        {
                        //            esCeramico = true;
                        //            break;
                        //        }                                  
                        //}
                        //if (esCeramico)
                        //{
                        //    strGlosa2 = strGlosa2 + " " + ParametroBC.Instance.getParamValue("glosa3");   
                        //}

                        //lblGlosa2.Text = strGlosa2;
                        //lblGlosa3.Text = ParametroBC.Instance.getParamValue("glosa4");
                        //lblGlosa4.Text = ParametroBC.Instance.getParamValue("glosa5");

                        //lblGlosa5.Text = ParametroBC.Instance.getParamValue("glosa6");   
                        //lblGlosa7.Text = ParametroBC.Instance.getParamValue("glosa7");
                        //lblGlosa8.Text = ParametroBC.Instance.getParamValue("glosa8");
                                
                        //Glosa para los materiales o para las jerarquias

                        //rgutierrez 18.11.2011
                        List<GlosaBE> glosas = PedidoBC.Instance.glosasCotizacion(objPedido.NumPedido);
                        //List<GlosaBE> glosas = PedidoBC.Instance.glosasCotizacion(lst, objPedido.FechaEntrega);
                        GdvGlosa.DataSource = glosas;
                        GdvGlosa.DataBind();
                    }
                    else
                    {
                        throw new Exception("No se encontró el doc. de ventas.");
                    }
                }
                else
                {
                    throw new Exception("No se especificó el doc. de ventas.");
                }
            }
            catch (Exception ex)
            {
                Response.Write("<h4>No se puede mostrar la información.<br />Error: " + ex.Message + "</h4>");
                Page.Visible = false;
            }
        }

        protected void GdvLista_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
